home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / txf / src / txfetc.c < prev    next >
C/C++ Source or Header  |  1994-09-17  |  6KB  |  274 lines

  1. /*====================================================================
  2.  *
  3.  * TXF etc. function
  4.  *
  5.  *====================================================================
  6.  *                                   copyright(C) 1992-1994 T.Nakatani
  7.  *====================================================================
  8.  */
  9. #include "txf.h"
  10.  
  11. int hex(char far *str)
  12. {
  13.     int i, j, val = 0;
  14.  
  15.     for (j = 0; j < 2; j++) {
  16.         i = (int)(*(str + j));
  17.         if ((i < 0x30) || (i > 0x66)) i = 0;
  18.         if (i > 0x60) i -= 0x57;
  19.         if (i > 0x46) i = 0;
  20.         if (i > 0x40) i -= 0x37;
  21.         if (i > 0x39) i = 0;
  22.         if (i > 0x2f) i -= 0x30;
  23.         val += (i * ((j == 0) ? 16 : 1));
  24.     }
  25.     return (val);
  26. }
  27.  
  28. char far *ftrans(char far *form)
  29. {
  30.     int i = 0, j = 0, k = 0;
  31.     int len = far_strlen(form);
  32.     int chrattr = CT_ANK, lowk, highk;
  33.     char far *original, *attr, *tmp, far *str;
  34.  
  35.     if (form == NULL) {
  36.         errexit("find NULL pointer(ftrans)");
  37.     }
  38.     attr = malloc(len + 1);
  39.     if (attr == NULL) {
  40.         errexit("Heap Error at(ftrans)");
  41.     }
  42.     original = form;
  43.     tmp = malloc(3000);
  44.     if (tmp == NULL) {
  45.         errexit("out of memory at ftrans()");
  46.     }
  47.     for (i = 0; *(original + i) != NUL; i++) {
  48.         chrattr = chkctype(*(original + i), chrattr);
  49.         *(attr + i) = chrattr;
  50.     }
  51.  
  52.     for (i = 0; i < len; i++) {
  53.         if ((*(original + i) == 0x5c) && (*(attr + i) == CT_ANK)) {
  54.             i++;
  55.             switch (*(original + i)) {
  56.             case 0x5c:
  57.                 *(tmp + j) = 0x5c;
  58.                 break;
  59.             case '-':
  60.                 *(tmp + j) = '-';
  61.                 break;
  62.             case '#':
  63.                 *(tmp + j) = '#';
  64.                 break;
  65.             case '_':
  66.                 *(tmp + j) = ' ';
  67.                 break;
  68.             case 0x81:
  69.                 if (*(original + i + 1) == 0x51) {
  70.                     i++;
  71.                     *(tmp+j) = 0x81;
  72.                     j++;
  73.                     *(tmp+j) = 0x40;
  74.                 }
  75.                 break;
  76.             case 'e':
  77.                 *(tmp + j) = '=';
  78.                 break;
  79.             case 'd':
  80.                 *(tmp + j) = 0x22;
  81.                 break;
  82.             case 'n':
  83.                 *(tmp + j) = CR;
  84.                 j++;
  85.                 *(tmp + j) = LF;
  86.                 break;
  87.             case 't':
  88.                 *(tmp + j) = TAB;
  89.                 break;
  90.             case 's':
  91.                 *(tmp + j) = ';';
  92.                 break;
  93.             case 'r':
  94.                 *(tmp + j) = '>';
  95.                 break;
  96.             case 'l':
  97.                 *(tmp + j) = '<';
  98.                 break;
  99.             case 'v':
  100.                 *(tmp + j) = '|';
  101.                 break;
  102.             case 'x':
  103.                 *(tmp + j) = hex(original + i + 1);
  104.                 i += 2;
  105.                 break;
  106.             case 'X':
  107.                 *(tmp + j) = hex(original + i + 1);
  108.                 j++;
  109.                 *(tmp + j) = hex(original + i + 3);
  110.                 i += 4;
  111.                 break;
  112.             default:
  113.                 *(tmp + j) = *(original + i);
  114.             }
  115.         }
  116.         else if ((*(original + i) == '-') && (*(attr + i) == CT_ANK)) {
  117.             if ((*(attr + i - 1) == CT_ANK) && (*(attr + i + 1) == CT_ANK)) {
  118.                 for (k = 1; (*(original+i-1) + k) <= *(original+i+1); k++) {
  119.                     *(tmp + (j++)) = *(original + i - 1) + k;
  120.                 }
  121.                 i++;
  122.                 j--;
  123.             }
  124.             else if ((*(attr+i-1) == CT_KJ2) && (*(attr+i+1) == CT_KJ1)) {
  125.                 lowk = (*(original + i - 2) << 8) | *(original + i - 1);
  126.                 highk = (*(original + i + 1) << 8) | *(original + i + 2);
  127.                 for (k = (lowk + 1); k <= highk; k++) {
  128.                     *(tmp + (j++)) = k >> 8;
  129.                     *(tmp + (j++)) = k & 0xff;
  130.                 }
  131.                 i += 2;
  132.                 j--;
  133.             }
  134.         }
  135.         else {
  136.             (*(tmp + j)) = (*(original + i));
  137.         }
  138.         j++;
  139.     }
  140.     *(tmp + j) = NUL;
  141.     str = farmalloc(strlen(tmp) + 1);
  142.     if (str == NULL) {
  143.         errexit("Heap Error at(ftrans2)");
  144.     }
  145.     far_strcpy(str, tmp);
  146.     free(attr);
  147.     free(tmp);
  148.     return (str);
  149. }
  150.  
  151. int quotechk(char far *ptr)
  152. {
  153.     char *now, *next;
  154.     if (strchr(kq, ',') == NULL) {
  155.         if (iskanji(*ptr)) {
  156.             if (jstrchr(kq, (*(ptr+1L) | (*ptr << 8))) != NULL) return (1);
  157.         }
  158.         else {
  159.             if (jstrchr(kq, (*ptr & 0x0ff)) != NULL) return (1);
  160.         }
  161.     }
  162.     else {
  163.         next = kq;
  164.         for(;;) {
  165.             now = next;
  166.             while (*now == ',') now++;
  167.             if (*now == NUL) {
  168.                 break;
  169.             }
  170.             if ((next = strchr(now, ',')) == NULL) {
  171.                 next = strchr(now, NUL);
  172.             }
  173.             if (far_strncmp(ptr, now, (int)(next - now)) == 0) {
  174.                 return (1);
  175.             }
  176.         }
  177.     }
  178.  
  179.     return (0);
  180. }
  181.  
  182. /*
  183. char *strspc(char *ptr, char find)
  184. {
  185.     while (*ptr != find) {
  186.         if (*ptr == NUL) {
  187.             return (ptr);
  188.         }
  189.         *ptr = NUL;
  190.         ptr++;
  191.     }
  192.     return (ptr);
  193. }
  194. */
  195.  
  196. char *ktrans(char far *str)
  197. {
  198.     char far *buf;
  199.     char *nbuf;
  200.  
  201.     buf = ftrans(str);
  202.     nbuf = malloc(far_strlen(buf)+1);
  203.     if (nbuf == NULL) {
  204.         errexit("Heap Error");
  205.     }
  206.     far_strcpy(nbuf, buf);
  207.     farfree(buf);
  208.     return (nbuf);
  209. }
  210.  
  211.  
  212. void init_allswitch()
  213. {
  214.     int i;
  215.     inputfile[0] = NUL;
  216.     outputfile[0] = NUL;
  217.     for (i = 0; i < PARA_MAX; i++) {
  218.         para[i] = NULL;
  219.     }
  220.     for (i = 0; i < 2; i++) {
  221.         tfile[i][0] = NUL;
  222.     }
  223.     for (i = 0; i < 16; i++) {
  224.         exold[i] = NULL;
  225.         exnew[i] = NULL;
  226.     }
  227.     *bakfile = NUL;        /*    -rb    */
  228.     tabsize = 8;        /*    -t    */
  229.     tabx = 0;            /*    -x    tab展開    */
  230.     maxc = 76;            /*    -l    */
  231.     cent = 0;            /*    -c    */
  232.     left = -1;            /*    -ml    */
  233.     right = -1;            /*    -mr    */
  234.     retflg = 0;            /*    -r    */
  235.     quoteflg = 0;        /*    -q    引用文    */
  236.     base = -1;            /*    -b    */
  237.     tfile[0][0] = NUL;    /*    -d    */
  238.     tfile[1][0] = NUL;    /*    -d    */
  239.     exflg = 0;            /*    -e    */
  240.     format = 1;            /*    -n,-f    */
  241.     viewmode = 0;        /*    -v    */
  242.     sep = 0x22;            /*    -s    */
  243.     removeeofflg = 0;
  244.     removebakfile = 0;
  245. }
  246.  
  247. void gettmpfile()
  248. {
  249.     if (getenv("TMP") != NULL) {
  250.         strncpy(tfile[0], getenv("TMP"), 64);
  251. #ifdef DEBUG
  252.         if (viewmode > 3) {
  253.             fprintf(stderr, "TMP 0:%s\n", tfile[0]);
  254.         }
  255. #endif
  256.     }
  257.     else {
  258.         strncpy(tfile[0], basedir, 80);
  259.         if (strchr(tfile[0], 0x5c) != NULL) {
  260.             *(strrchr(tfile[0], 0x5c)) = NUL;
  261.         }
  262.         else if (strrchr(tfile[0], ':') != NULL) {
  263.             *(strrchr(tfile[0], ':') + 1) = NUL;
  264.         }
  265.         else{
  266.             tfile[0][0] = NUL;
  267.         }
  268.         if (viewmode > 3) {
  269.             fprintf(stderr, "TMP 0:%s\n", tfile[0]);
  270.         }
  271.     }
  272. }
  273.  
  274.